
using System;

using System.Collections.Generic;
using UnityEngine;

public class Solution : MonoBehaviour
{


    void Start()
    {
        int[] nums = { 5, 5, 6, 6, 7, 8, 1, 2, 3, 4, 5 };
        Debug.Log(MinArray(nums));
    }
    //  public int MinArray(int[] numbers) {
    //     int num=0;
    //     if(numbers.Length<=1){
    //         return numbers[0];
    //     }
    //     for(int i=0;i<numbers.Length-1;i++){
    //         if((numbers[i]>numbers[i+1])){
    //             num=numbers[i+1];
    //             break;
    //         }else{
    //             num=numbers[0];
    //         }
    //     }
    //     return num;
    // }



    // //二分法模板学习
    // bool check(int x) {/* ... */} // 检查x是否满足某种性质

    // // 区间[l, r]被划分成[l, mid]和[mid + 1, r]时使用：
    // int bsearch_1(int l, int r)
    // {
    //     while (l < r)
    //     {
    //         int mid = l + r >> 1;
    //         if (check(mid)) r = mid;    // check()判断mid是否满足性质
    //         else l = mid + 1;
    //     }
    //     return l;
    // }
    // // 区间[l, r]被划分成[l, mid - 1]和[mid, r]时使用：
    // int bsearch_2(int l, int r)
    // {
    //     while (l < r)
    //     {
    //         int mid = l + r + 1 >> 1;
    //         if (check(mid)) l = mid;
    //         else r = mid - 1;
    //     }
    //     return l;
    // }


    //二分法 解第一题
    public int MinArray(int[] numbers)
    {
        int left = 0;
        int right = numbers.Length - 1;
        
        while (left < right)
        {
            int middle = left+(right - left) / 2;   //不用加法防止 越界
            if (numbers[middle] < numbers[right])
            {
                right = middle ;    //向下取整 left<=midlle<right

            }
            else if (numbers[middle] > numbers[right])
            {
                left = middle + 1;
            }
            else
            {
                right = right - 1;
            }
        }
        return numbers[left];
    }
}